Software developers commonly utilize many different types of tools during the development of a software application. For example, software developers might utilize tools for editing source code and for compiling the source code into executable code. In addition to these tools, software developers might also utilize other types of utility programs to assist with the development of a program. For example, a developer might utilize a version control system (“VCS”) to manage changes made to the source code and other components of the program.
A developer might utilize functionality provided by a VCS to manage changes made to source code files and other types of files associated with a program under development. The VCS may store the source code files and other files in a data store, commonly referred to as a source code repository. Such a repository might also be utilized to store a version control graph that describes changes that have been made to the program over time. The source code repository might also be utilized to store other types of data and/or metadata regarding the creation and modification of a program.
Source code repositories are commonly stored in a single location and replicated to other locations. This storage model, however, may limit the durability of a source code repository and might also limit the manner in which the source code repository can be accessed. However, storing a source code repository in a durable, highly available manner may present a number of complex challenges. One challenge associated with storing a source code repository in a shared system stems from the fact that many types of source code repositories are structured as directed acyclic graphs. Directed acyclic graphs may be difficult to store in a replicated system, especially when new data is added often and frequent partial traversals are required, such as when utilized by a VCS.
It is with respect to these and other considerations that the disclosure made herein is presented.